import axios from 'axios';
import qs from 'qs';

import { ElMessage } from 'element-plus';
//import JSONBIG from 'json-bigint';
axios.defaults.baseURL = ''; // 正式
// axios.defaults.baseURL = 'https://zhangteng.cloud:5001/api' // 测试

// post请求头
axios.defaults.headers.post['Content-Type'] = 'application/json;charset=UTF-8';
// 允许跨域携带cookie信息
axios.defaults.withCredentials = true;
// 设置超时
axios.defaults.timeout = 15000;

// axios.defaults.transformResponse = [
//   //解决超过 16 位数字精度丢失问题

//   //在返回参数接收前进行处理

//   function (data) {
//     //data就是接口返回的原始数据
//     //遍历data
//     console.log('data[0].id.toString()', JSON.parse(data).data[0].id.toString());

//     return JSONBIG.parse(data);

//     /*
//   　　console.log(JSONbig.parse('{"value":12345678912345678912}'));
//   　　控制台输出类似
//   　　{
//   　　　　value: BigNumber
//   　　　　c: (2) [123456, 78912345678912]
//   　　　　e: 19
//   　　　　s: 1
//   　　}
//   　　页面显示 12345678912345678912
//   　　不影响使用

//   　　console.log(JSON.stringify(JSONbig.parse(JSONbig.parse('{"value":12345678912345678912}'))))
//   　　控制台输出 json 字符串
//   　　{"value":"12345678912345678912"}
//   　　可见已转成 json 字符串

//   　　再使用 JSON.parse()
//   　　console.log(JSON.parse(JSON.stringify(JSONbig.parse('{"value":12345678912345678912}'))))
//   　　控制台输出 json
//   　　{
//   　　　　value:"12345678912345678912"
//   　　}

//   */
//   },
// ];

axios.interceptors.request.use(
  (config) => {
    // const cookie = document.cookie;
    // // 如果存在cookie，则添加到请求头中
    // if (cookie) {
    //   config.headers.Cookie = cookie;
    // } else {
    //   // 没有cookie时，移除请求头中的cookie字段
    //   delete config.headers.Cookie;
    // }
    return config;
  },
  (error) => {
    return Promise.reject(error);
  },
);

axios.interceptors.response.use(
  (response) => {
    if (response.status === 200) {
      return Promise.resolve(response);
    }
    if (response.status === 204) {
      return Promise.resolve(response);
    }
    return Promise.reject(response);
  },
  (error) => {
    ElMessage({
      type: 'error',
      message: `请求异常${JSON.stringify(error)}`,
      duration: 5 * 1000,
    });
  },
);
export default {
  /**
   * @param {String} url
   * @param {Object} data
   * @returns Promise
   */
  post2(url, data) {
    return new Promise((resolve, reject) => {
      axios({
        method: 'post',
        url,
        data: qs.stringify(data),
      })
        .then((res) => {
          resolve(res.data);
        })
        .catch((err) => {
          reject(err);
        });
    });
  },
  post(url, data) {
    return new Promise((resolve, reject) => {
      axios({
        method: 'post',
        url,
        data,
      })
        .then((res) => {
          resolve(res.data);
        })
        .catch((err) => {
          reject(err);
        });
    });
  },
  put(url, data) {
    return new Promise((resolve, reject) => {
      axios({
        method: 'put',
        url,
        data,
      })
        .then((res) => {
          resolve(res.data);
        })
        .catch((err) => {
          reject(err);
        });
    });
  },
  get(url, data) {
    return new Promise((resolve, reject) => {
      axios({
        method: 'get',
        url,
        params: data,
      })
        .then((res) => {
          resolve(res.data);
        })
        .catch((err) => {
          reject(err);
        });
    });
  },
  delete(url, data) {
    return new Promise((resolve, reject) => {
      axios({
        method: 'delete',
        url,
        params: data,
      })
        .then((res) => {
          resolve(res.data);
        })
        .catch((err) => {
          reject(err);
        });
    });
  },
  /**
   * 获取日志流
   * @param {String} url
   * @returns {Promise<stream>}
   */
  stream(url) {
    return axios({
      method: 'get',
      url,
      responseType: 'stream', // 设置响应类型为 'stream'
    });
  },

  // ...省略其他方法...
};

